home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyc (Python 2.6)
-
- from lphelper import LateBindingProperty, user, change_obj
-
- class LPSubscribers(dict):
- '''
- keys[0] is default category
- '''
-
- def __init__(self, keys):
- if not isinstance(keys, (list, tuple, set)):
- raise AssertionError
- self._LPSubscribers__keys = keys
- self._LPSubscribers__default = keys[0]
- self._LPSubscribers__removed = set()
- self._LPSubscribers__added = set()
- dict.__init__(self, (lambda .0: for i in .0:
- (i, set()))(self._LPSubscribers__keys))
-
-
- def __setitem__(self, key, value):
- if key not in self._LPSubscribers__keys:
- raise KeyError
- key not in self._LPSubscribers__keys
- if key is None or key == self._LPSubscribers__default:
- key = self._LPSubscribers__default
- else:
- raise NotImplementedError, "It is impossible to subscribe to '%s'" % key
- if not key == self._LPSubscribers__default(value, set):
- raise AssertionError
- self._LPSubscribers__removed = self[self._LPSubscribers__default] - value
- self._LPSubscribers__added = value - self[self._LPSubscribers__default]
- super(LPSubscribers, self).__setitem__(key, value)
-
-
- def __iter__(self):
- for i in self.itervalues():
- for k in i:
- yield k
-
-
-
-
- def __repr__(self):
- return '<Subscribers>'
-
-
- def __len__(self):
- return sum(map(len, self.values()))
-
-
- def __str__(self):
- return 'set([%s])' % ', '.join((lambda .0: for i in .0:
- repr(i))(self))
-
-
- def add(self, lp_user, key = None):
- if key is None or key == self._LPSubscribers__default:
- key = self._LPSubscribers__default
- else:
- raise NotImplementedError, "It is impossible to subscribe to '%s'" % key
- if not key == self._LPSubscribers__default(lp_user, user):
- lp_user = user(lp_user)
-
- if lp_user not in self[key]:
- if lp_user in self._LPSubscribers__removed:
- self._LPSubscribers__removed.remove(lp_user)
- else:
- self._LPSubscribers__added.add(lp_user)
- self._LPSubscribers__added.add(lp_user)
- self[key].add(lp_user)
- else:
- raise ValueError, "'%s' is already subscribed to this bug" % lp_user
- return lp_user not in self[key]
-
-
- def remove(self, lp_user, key = None):
- if key is None or key == self._LPSubscribers__default:
- key = self._LPSubscribers__default
- else:
- raise NotImplementedError, "It is impossible to unsubscribe from '%s'" % key
- if not key == self._LPSubscribers__default(lp_user, user):
- lp_user = user(lp_user)
-
- if lp_user in self[key]:
- if lp_user in self._LPSubscribers__added:
- self._LPSubscribers__added.remove(lp_user)
- else:
- self._LPSubscribers__removed.add(lp_user)
- self[key].remove(lp_user)
- else:
- raise ValueError, "'%s' is not directly subscribed to this bug, can not be removed" % lp_user
- return lp_user in self[key]
-
-
- def get_subscriptions(self, key):
- return self[key]
-
-
- def parse(self):
- raise NotImplementedError, 'this method must be implemented by a concrete subclass'
-
-
- def changed(self):
- changed = set()
- for i in self._LPSubscribers__removed:
- changed.add(change_obj(i, 'removed'))
-
- for i in self._LPSubscribers__added:
- changed.add(change_obj(i, 'added'))
-
- return changed
-
- changed = property(changed)
-
- def commit(self):
- raise NotImplementedError, 'this method must be implemented by a concrete subclass'
-
-
- if __name__ == '__main__':
- s = LPSubscribers(('direct', 'indirect', 'notified'))
- s.add('hallo')
- s.add('boo')
- s.add('boo', 'indirect')
- print s
- print repr(s)
- print len(s)
- print s.get_subscriptions('indirect')
-
-